// 确保window.attributeUtils对象存在
window.attributeUtils = window.attributeUtils || {};

/**
 * 获取元素属性值，若不存在则返回默认值
 * @param {HTMLElement} element - 元素实例
 * @param {string} name - 属性名称
 * @param {any} defaultValue - 默认值
 * @returns {any} 属性值或默认值
 */
window.attributeUtils.getAttributeWithDefault = function(element, name, defaultValue) {
    return element.getAttribute(name) || defaultValue;
};

/**
 * 规范化属性键名：从第一个-后截取到_前，-转驼峰
 * @param {string} attrName - 原始属性名
 * @returns {string} 规范化后的键名
 */
window.attributeUtils.normalizeKey = function(attrName) {
    const dashIndex = attrName.indexOf('-');
    if (dashIndex === -1) return attrName;

    // 从第一个-后开始截取到_前
    const subStr = attrName.substring(
        dashIndex + 1,
        attrName.indexOf('_', dashIndex)
    );

    // 转换为驼峰命名
    return subStr.split('-').map((part, i) =>
        i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)
    ).join('');
};

/**
 * 构建配置对象
 * @param {HTMLElement} element - 元素实例
 * @param {Array} attrList - 属性配置列表，每项为[属性名, 默认值]
 * @returns {Object} 构建后的配置对象
 */
window.attributeUtils.buildConfig = function(element, attrList) {
    const cfg = {};

    // 直接使用window.attributeUtils的绝对引用，避免this问题
    attrList.forEach(([attrName, defaultValue]) => {
        // 直接调用window.attributeUtils上的方法
        let val = window.attributeUtils.getAttributeWithDefault(element, attrName, defaultValue);

        // 处理布尔值
        if (typeof defaultValue === 'boolean') {
            val = element.getAttribute(attrName) !== null
                ? element.getAttribute(attrName).toLowerCase() === 'true'
                : defaultValue;
        }

        // 处理数字值
        if (typeof defaultValue === 'number') {
            val = parseFloat(val);
        }

        // 处理数组值（以_array结尾的属性）
        if (attrName.endsWith('_array')) {
            val = (val || '').split(',').filter(item => item.trim() !== '');
        }

        // 直接调用window.attributeUtils上的方法
        cfg[window.attributeUtils.normalizeKey(attrName)] = val;
    });

    return cfg;
};
